#pragma once
#include "AITypes.h"

namespace ai
{
	class AIInput;
	class AIOutput;
	class AIActor;

	// AI package is a tactic of agent's behavior. AI package is mostly equal to agent function.
	// Package maps input values from sensors(perception) and memory to output values for actuators and memory.
	class AIPackage
	{
	public:
		// actor
		// subject
		// priority
		// conditions: pre-condition, start/stop
		// active/passive
		// memory+perception => memory+actuators (input => output)
		bool checkCondition(AIActor* actor) const;

		// There should be differences
		virtual void run(AIActor* actor ) const = 0;
	protected:
		std::vector<AIInput*> _inputs;
		std::vector<AIOutput*> _outputs;
	};

	class AINeuralNetworkPackage : public AIPackage
	{

	};
}